package whr.common.utils;

import org.apache.poi.hssf.usermodel.HSSFRichTextString;
import org.apache.poi.ss.usermodel.*;
import org.springframework.core.io.ClassPathResource;
import org.springframework.util.StringUtils;
import org.springframework.web.multipart.MultipartFile;
import whr.modules.sys.entity.SysUserEntity;

import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

public class UserExcelUtil {


    /**
     * 导入excel
     * @param file
     * @param request
     * @return
     */
    public List<SysUserEntity> importCustomer(MultipartFile file, HttpServletRequest request){

        //获得Servlet上下文引用，从上下文引用获得上传目录，真实目录地址
        String path = request.getSession().getServletContext().getRealPath("upload");
        //获得上传文件名字
        String fileName = file.getOriginalFilename();
        //根据上传文件目录和上传文件名创建上传文件File对象
        File targetFile = new File(path, fileName);
        //判断上传文件对象是否为空，如果为空，创建上传文件目录包含父目录
        if(!targetFile.exists()){
            targetFile.mkdirs();
        }

        List<SysUserEntity> ueList = new ArrayList<SysUserEntity>();

        try {
            //把上传的文件保存到指定的目录
            file.transferTo(targetFile);
            //从制定目录读取文件
            FileInputStream filein=new FileInputStream(targetFile);
            //读取文件到WORKBOOK
            Workbook workbook= WorkbookFactory.create(filein);
            //读取第一张工作表
            Sheet sheet= workbook.getSheetAt(0);
            //判断工作表里面有几行内容
//            int rowNum = sheet.getPhysicalNumberOfRows();
            //判断工作表里面第一行有几个单元格（因为表格模板所有行的单元格数量一致）
//            int cellNum = sheet.getRow(0).getPhysicalNumberOfCells();

            // 对Sheet中的每一行进行迭代
            for (Row r : sheet) {
                // 如果当前行的行号（从0开始）未达到2（第三行）则重新循环
                if (r.getRowNum() < 1) {
                    continue;
                }
                // 创建实体类
                SysUserEntity ue = new SysUserEntity();

                // 取出当前行第1个单元格数据，并封装在ue实体stuName属性上
//                String id = r.getCell(0) == null ? null : r.getCell(0).getStringCellValue();
//                ue.setId(Long.valueOf(id));

                //用户名
                String eid_String = r.getCell(1).getStringCellValue();
                ue.setUsername(StringUtils.isEmpty(eid_String)  ? "" : eid_String);
                //邮箱
                ue.setEmail(r.getCell(2) == null ? "" : r.getCell(2).getStringCellValue());
                //手机号
                ue.setMobile(r.getCell(3) == null ? "" : r.getCell(3).getStringCellValue());
                //组织机构我的组织机构是integer类型的
                ue.setOrganizationsId(isEmpoty(r.getCell(4)) ? null : Integer.valueOf(r.getCell(4).getStringCellValue()));
                //创建时间，我的创建是时间是data类型的setCreateTime
                ue.setCreateTime(isEmpoty(r.getCell(5)) ? null : r.getCell(5).getDateCellValue());
                //状态
                Cell cell = r.getCell(6);
                if (cell.getCellType() == CellType.NUMERIC) {
                    Double numericValue = cell.getNumericCellValue();
                    int i = numericValue.intValue();
                    ue.setStatus(i);
                }

                ueList.add(ue);
            }

        } catch (Exception e) {
            e.printStackTrace();
        }
        return ueList;
    }

    public boolean isEmpoty(Cell object ){
        if (object == null) {
            return true;
        }else if("null".equals(object.getStringCellValue())){
            return true;
        }
        return false;
    }


    public void exportData(List<SysUserEntity> datalist, HttpServletResponse response) {
        //这里是从后台resources文件夹下读取一个excel模板
        ClassPathResource resource = new ClassPathResource("template/01.xlsx");
        try(InputStream fis = resource.getInputStream();
            Workbook workbook = WorkbookFactory.create(fis);
            ServletOutputStream os = response.getOutputStream()
        ){
            Sheet sheet = workbook.getSheetAt(0);
            //---------------- execl 头信息 -------------------
            String[] headers = {"ID", "用户名", "邮箱", "电话", "组织机构", "创建时间", "状态"};

            Row row = sheet.createRow(0);

            // 生成一个样式
            CellStyle style = workbook.createCellStyle();

            // 设置这些样式
//        style.setFillForegroundColor(HSSFColor.SKY_BLUE.index);
//        style.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
//        style.setBorderBottom(HSSFCellStyle.BORDER_THIN);
//        style.setBorderLeft(HSSFCellStyle.BORDER_THIN);
//        style.setBorderRight(HSSFCellStyle.BORDER_THIN);
//        style.setBorderTop(HSSFCellStyle.BORDER_THIN);
//        style.setAlignment(HSSFCellStyle.ALIGN_CENTER);
//        // 生成一个字体
//        XSSFFont font = workbook.createFont();
//        font.setColor(HSSFColor.VIOLET.index);
//        font.setFontHeightInPoints((short) 12);
//        font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
            // 把字体应用到当前的样式
//        style.setFont(font);
            //--------------------------- 样式(选做) -------------------------------

            for (short i = 0; i < headers.length; i++) {
                // cell 单元格
                Cell cell = row.createCell(i);
                //单元格 样式
                cell.setCellStyle(style);
                //单元格 数据
                HSSFRichTextString text = new HSSFRichTextString(headers[i]);
                cell.setCellValue(text);
            }
            //---------------- execl 头信息 -------------------

            //3、新增行
            SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            for (int i = 0; i < datalist.size(); i++) {
                row = sheet.createRow(i + 1);

                row.createCell(0).setCellValue(datalist.get(i).getUserId() + "");
                row.createCell(1).setCellValue(datalist.get(i).getUsername()+"");
                row.createCell(2).setCellValue(datalist.get(i).getEmail() + "");
                row.createCell(3).setCellValue(datalist.get(i).getMobile());
                row.createCell(4).setCellValue(datalist.get(i).getOrganizationsId());

                // 格式化日期：因为导出的Excel文件中的创建日期的格式是浮点数，需要进行转换
                Date createTime = datalist.get(i).getCreateTime();
                String formattedDate = dateFormat.format(createTime);
                row.createCell(5).setCellValue(formattedDate);

                row.createCell(6).setCellValue(datalist.get(i).getStatus());

//            row.createCell(11).setCellValue(DateUtils.formatDateToStr(datalist.get(i).getCreatetime(),"yyyy-MM-dd HH:mm:ss"));

            }

            /*......你的操作......*/
            //这块开始配置传输
            response.setCharacterEncoding("UTF-8");
            response.setContentType("application/vnd.ms-excel");
            response.setHeader("Content-disposition", "attachment;filename=template.xlsx");
            response.flushBuffer();
            workbook.write(os);
            os.flush();
            os.close();
        }catch (IOException e) {
            throw new RuntimeException(e);
        }

    }


}
